package org.nobject.common.text;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * 字符集工具类
 * 
 * @author bianrongjun
 * @version 1.0
 */
public class CharsetUtils {

	
	/** 
	 * 转化为Unicode
	 * @param str
	 */
	public static String toUnicode(String str){
        char[]cs=str.toCharArray();
        int iValue=0;
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<cs.length;i++){
            iValue=(int)str.charAt(i);           
            if(iValue<=256){
            	sb.append("\\");
            }else{
            	sb.append("\\u");
            }
            sb.append(Integer.toHexString(iValue));
        }
        return sb.toString();
    }
	
	/** 
	 * gb2312转Utf8
	 * @param str
	 */
	public static String gb2312ToUtf8(String str) {
		String urlEncode = "";
		try {
			urlEncode = URLEncoder.encode(str, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}
		return urlEncode;

	}

	/**
	 * gbk转utf8
	 * @param str
	 */
	public static String gbk2Utf8(String str) {
		char c[] = str.toCharArray();
		byte[] fullByte = new byte[3 * c.length];
		for (int i = 0; i < c.length; i++) {
			int m = (int) c[i];
			String word = Integer.toBinaryString(m);

			StringBuffer sb = new StringBuffer();
			int len = 16 - word.length();
			for (int j = 0; j < len; j++) {
				sb.append("0");
			}
			sb.append(word);
			sb.insert(0, "1110");
			sb.insert(8, "10");
			sb.insert(16, "10");

			String s1 = sb.substring(0, 8);
			String s2 = sb.substring(8, 16);
			String s3 = sb.substring(16);

			byte b0 = Integer.valueOf(s1, 2).byteValue();
			byte b1 = Integer.valueOf(s2, 2).byteValue();
			byte b2 = Integer.valueOf(s3, 2).byteValue();
			byte[] bf = new byte[3];
			bf[0] = b0;
			fullByte[i * 3] = bf[0];
			bf[1] = b1;
			fullByte[i * 3 + 1] = bf[1];
			bf[2] = b2;
			fullByte[i * 3 + 2] = bf[2];

		}
		try {
			return new String(fullByte, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}
	}
}
